package com.garrett.demo.sys.service;


import cn.smalltool.core.lang.Validator;
import cn.smalltool.core.utils.IdcardUtil;
import cn.smalltool.core.utils.StrUtil;
import com.garrett.demo.sys.dao.UserDataBaseDemo;
import com.garrett.demo.sys.entity.Account;
import com.garrett.demo.sys.entity.SimsStudent;
import org.springframework.stereotype.Service;

import java.util.Arrays;

@Service
public class AccountServiceImp extends AbstractAccountService {
    private UserDataBaseDemo uDBD=new UserDataBaseDemo();

    //验证信息
    @Override
    public SimsStudent checkLogin(String account, String password) {

        for(int i=0;uDBD.getAllStudent()[i]!=null && i<uDBD.getAllStudent().length;i++){
            if(uDBD.getAllStudent()[i].getStudentId().equals(account) &&
                    uDBD.getUserByAccount(account).getPassword().equals(password))
                return uDBD.getAllStudent()[i];
        }
        return null;
    }

    //注册账户
    @Override
    public void createAccount(Object... obj) {
        Account account=(Account) obj[1];
        SimsStudent ss=(SimsStudent)obj[0];
        uDBD.createUser(ss);
        account.setAccount(ss.getStudentId());
        uDBD.addAccount(account);
    }



    //验证密码
    public boolean verifyPassword(String pw1, String pw2) {
        return pw1.length()>=6 && pw1.length()<=16 && pw1.equals(pw2);
    }

    //验证身份证
    public boolean verifyIdCard(String idCard) {
        return IdcardUtil.isValidCard(idCard);
    }



    //验证学号
    public boolean verifyStuId(String stuId) {

        //判断是否为空
        if(StrUtil.isBlank(stuId)) return false;

        //判断是否满足长度为9
        if (stuId.length() != 9) return false;

        //判断学号有无非数字
        for (int i = 0; i < stuId.length(); i++) {
            char a = stuId.charAt(i);
            if (a < '0' || a > '9') return false;
        }

        return true;
    }

    //判断学号是否已存在
    public boolean checkStuId(String stuId){
        SimsStudent [] ss = uDBD.getAllStudent();
        for(int i=0;i<ss.length && ss[i]!=null;i++){
            if(ss[i].getStudentId().equals(stuId)) {
                return true;
            }
        }
        return false;
    }

    //------------------------------

    //判断id是否已存在
    public boolean checkId(String id){
        Account [] ss = uDBD.getAllAccount();
        for(int i=0;i<ss.length && ss[i]!=null;i++){
            if(ss[i].getId().equals(id)) {
                return true;
            }
        }
        return false;
    }



    /**
     * 获取所有账户信息
     * @return 账户列表
     */
    //获取所有账户信息
    @Override
    public Account[] getAllAccounts(){
        return uDBD.getAllAccount();
    }


    /**
     * 获取所有学生信息
     * @return 学生信息列表
     */
    //获取所有学生信息
    @Override
    public SimsStudent[] getAllStudents(){
        return uDBD.getAllStudent();
    }

    /**
     * 根据学号获取学生信息
     * @param studentId 学号
     * @return
     */
    //根据学号获取学生信息
    @Override
    public SimsStudent getStudentById(String studentId){
        return uDBD.getStudentById(studentId);
    }

    //根据id获取账户信息
    public Account getAccountById(String id){
        return uDBD.getAccountById(id);
    }




    /**
     * 修改数据 - 用于学生信息或账户信息修改
     * <p> Tips: objs[0] instanceof Account </p>
     * @param objs 对象数组
     */
    //修改数据 - 用于学生信息或账户信息修改
    @Override
    public void modify(Object... objs) {
        for(int i=1;i<=8;i++){
            if(objs[i]!=null){
                if(i<=4){
                    SimsStudent ss =new SimsStudent((String)objs[0],(String)objs[1],
                            (String)objs[2],(String)objs[3],(String)objs[4],(String)objs[5]);
                    uDBD.modifyStudentInfo(ss);
                }else {
                    Account ss = new Account((String)objs[6],(String)objs[7],(String)objs[8]);
                    uDBD.modifyAccount(ss);
                }
                break;
            }
        }
    }

    /**
     * 删除账户信息
     *
     * <p> 通过主键，以及学号间的绑定关系，同步删除数据空间中的account，和student</p>
     *
     * @param id 账户主键id
     */
    //删除账户信息
    @Override
    public void deleteAccount(String id){
        uDBD.delAccountById(id);
    }
    //删除学生信息
    public void deleteStudent(String stuId) {
        uDBD.delStudentInfo(stuId);
    }



}
